package cn.jtfadmin.core.modules.base.region.service;


import cn.jtfadmin.base.dict.dto.DictItemModelDTO;
import cn.jtfadmin.base.dict.service.DictEntityService;
import cn.jtfadmin.base.lang.common.domain.dto.PageRDTO;
import cn.jtfadmin.base.lang.common.domain.dto.ResultDTO;
import cn.jtfadmin.base.lang.common.domain.dto.SpecPagePDTO;
import cn.jtfadmin.base.lang.common.domain.dto.TreeRDTO;
import cn.jtfadmin.base.lang.common.service.BaseTreeService;
import cn.jtfadmin.core.modules.base.region.domain.dto.BaseRegionModelDTO;
import cn.jtfadmin.core.modules.base.region.domain.entity.BaseRegionEntity;
import org.springframework.lang.Nullable;

import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Optional;

/**
 * BaseRegionEntity服务类
 */
public interface BaseRegionService extends BaseTreeService<BaseRegionEntity>, DictEntityService<BaseRegionEntity> {


     String DICT_CODE_REGION = "REGION";




    /**
     * 初始化
     *
     * @return
     */
    void init();


    ResultDTO<PageRDTO<TreeRDTO<BaseRegionModelDTO>>> findPageTree(SpecPagePDTO<BaseRegionEntity> specPDTO);

    /**
     * 按照行政区码编号查询
     *
     * @param no
     * @return
     */
    BaseRegionEntity findRequiredByNo(@NotBlank String no);

    /**
     * 获取下级字典模型
     *
     * @param no
     * @return
     */
   List<DictItemModelDTO> findChildrenDictModel(String no);

    /**
     * 按照名称和父编号查询
     *
     * @param name     名称
     * @param parentNo 父级编号
     * @return
     */
    Optional<BaseRegionEntity> findOneByNameAndParentNo(@NotBlank String name, @Nullable String parentNo);
}
